package com.whc.gulimall.cart.vo;

import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author angaoen
 */
@Data
public class Cart {

    /**
     * 商品
     */
    private List<CartItem> cartItems;

    /**
     * 商品数量
     */
    @Setter(AccessLevel.NONE)
    @Getter(AccessLevel.NONE)
    private Integer productCount;

    /**
     * 商品类型总数
     */
    @Setter(AccessLevel.NONE)
    @Getter(AccessLevel.NONE)
    private Integer productTypeCount;

    /**
     * 总价
     */
    @Setter(AccessLevel.NONE)
    @Getter(AccessLevel.NONE)
    private BigDecimal amount;

    /**
     * 减免价格
     */
    private BigDecimal reducePrice = BigDecimal.ZERO;

    /**
     * 获取商品总数
     *
     * @return 商品总数
     */
    public Integer getProductCount() {
        return this.cartItems.stream().mapToInt(CartItem::getCount).sum();
    }

    /**
     * 获取商品类型总量
     *
     * @return 商品类型总量
     */
    public Integer getProductTypeCount() {
        return this.cartItems.size();
    }

    /**
     * 获取总价
     *
     * @return 总价
     */
    public BigDecimal getAmount() {
        return this.cartItems.stream().map(item -> {
            if (item.getChecked()) {
                return item.getTotalPrice();
            }
            return BigDecimal.ZERO;
        }).reduce(BigDecimal.ZERO, BigDecimal::add).subtract(this.reducePrice);
    }
}
